package com.renyr.singleton;

/**
 * 单例模式
 *
 * 在内部创建一个实例，构造器全部设置为private，所有方法均在该实例上改动，
 * 在创建上要注意类的实例化只能执行一次，可以采用许多种方法来实现，如Synchronized关键字，或者利用内部类等机制来实现。
 */
public class Singleton {

    /* 私有构造方法，防止被实例化 */
    private Singleton() {
    }


    /**
     * 懒汉模式
     */
    private static Singleton instance = null;
    /**
     * 懒汉模式
     *
     * 静态工程方法，创建实例
     * @return
     */
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public static synchronized Singleton getInstance1(){
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }


    /**
     * 饿汉模式
     * @return
     */
    private static Singleton instance2 = new Singleton();
    public static Singleton getInstance2(){
        return instance2;
    }

    /* 如果该对象被用于序列化，可以保证对象在序列化前后保持一致 */
    public Object readResolve() {
        return instance;
    }



}
